iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
Modern Web

來架個網站吧系列 第 10

來架個網站吧-10.資料規劃

  • 分享至 

  • xImage
  •  
tags: 來架個網站吧

我是目錄


完成需求訪談與系統流程規劃後,接下來就是資料規劃。

恩~距離打程式碼真的還有一段路 XDDD

在規劃資料表前需要考慮一些因素

  • 系統資料來源
  • 系統功能
  • 使用的技術框架
  • 未來資料成長量

上述因素是我在規劃資料表時必須考慮的因素。

系統資料來源

這次的需求資料來源是國語小字典,下圖是資料的部份擷圖。

國語小字典

乍看之下,有一點亂

觀察資料之後,可以設計下列資料表欄位:

  • [項目]: [規劃欄位英文名稱] / [欄位資料型態]/ [長度]
  • 單字: word / 文字 / 1
  • 部首: radical / 文字 / 1
  • 總筆畫數: total_strokes / 數值 / N/A
  • 部首外筆畫: out_strokes / 數值 / N/A
  • 注音: mpc / 文字 / 4
  • 解釋: explanation / 很多文字 / N/A

系統功能

看完資料之後,接下來要將系統功能加入考慮因素。此次的功能有搜尋單字、系統要承受每分鐘10次查詢,所以欄位單字會開定長。

  • [項目]: [規劃欄位英文名稱] / [欄位資料型態]/ [長度]
  • 單字: word / 定長文字 / 1
  • 部首: radical / 文字 / 1
  • 總筆畫數: total_strokes / 數值 / N/A
  • 部首外筆畫: out_strokes / 數值 / N/A
  • 注音: mpc / 文字 / 4
  • 解釋: explanation / 很多文字 / N/A

使用的技術框架

技術框架也會影響資料規劃,本次是使用下列技術:

  • 資料庫: Postgresql-15
  • 框架(Framework): Grails

以資料庫來說,可變動文字型態,在Oracle 會是以 varchar2,如果資料欄位中預期會有中文字則會採用nvarchar2,在postgresql需要規劃varchar即可。

本次是使用postgresql,所以下列是加入資料庫因素的資料表欄位:

  • [項目]: [規劃欄位英文名稱] / [欄位資料型態]
  • 單字: word / char(1)
  • 部首: radical / varchar(1)
  • 總筆畫數: total_strokes / integer
  • 部首外筆畫: out_strokes / integer
  • 注音: mpc / varchar(4)
  • 解釋: explanation / text

另外在程式技術框架,因為Grails 是採用事先約定規則,因此在規劃資料需要多開下列欄位

以下是這次資料表的完整規劃

  • [項目]: [規劃欄位英文名稱] / [欄位資料型態] / [其他]
  • id: id / bigint
  • version: version / integer
  • dateCreated: date_created / timestamp
  • lastUpdated: last_updated / timestamp
  • 單字: word / char(1)
  • 部首: radical / varchar(1)
  • 總筆畫數: total_strokes / integer
  • 部首外筆畫: out_strokes / integer
  • 注音: mpc / varchar(4)
  • 解釋: explanation / text

table schema

以下是最後完成的table schema

create table dict(
  id bigint generated always as identity,
  version integer default 0,
  date_created timestamp default CURRENT_TIMESTAMP,
  last_updated timestamp,
  word char(1),
  radical varchar(1),
  total_strokes integer,
  out_strokes integer,
  mpc varchar(4),
  explanation text,
  CONSTRAINT dict_pk PRIMARY KEY (id)
);
comment on table dict IS '字典';
comment on column dict.word is '單字';
comment on column dict.radical is '部首';
comment on column dict.total_strokes is '總筆畫數';
comment on column dict.out_strokes is '部首外筆畫';
comment on column dict.mpc is '注音';
comment on column dict.explanation is '解釋';

create unique index dict_un1 on dict (word);

上一篇
來架個網站吧-09.系統流程規劃
下一篇
來架個網站吧-11.網站開發-1: 建立專案
系列文
來架個網站吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言